home *** CD-ROM | disk | FTP | other *** search
/ QRZ! Ham Radio 4 / QRZ Ham Radio Callsign Database - Volume 4.iso / files / tcpip / amiga / asrc29p.lha / ripcmd.c < prev    next >
Encoding:
C/C++ Source or Header  |  1993-12-29  |  2.9 KB  |  166 lines

  1. /* RIP-related user commands */
  2. #include <stdio.h>
  3. #include "global.h"
  4. #include "mbuf.h"
  5. #include "netuser.h"
  6. #include "internet.h"
  7. #include "cmdparse.h"
  8. #include "timer.h"
  9. #include "iface.h"
  10. #include "udp.h"
  11. #include "rip.h"
  12. #include "commands.h"
  13.  
  14. struct cmds Ripcmds[] = {
  15.     "accept",    dodroprefuse,    0,    2,
  16.         "rip accept <gateway> ",
  17.     "add",        doripadd,    0,    3,
  18.         "rip add <dest> <interval> [<flags>]",
  19.     "drop",        doripdrop,    0,    2,
  20.         "rip drop <dest>",
  21.     "merge",    doripmerge,    0,    0,    NULLCHAR,
  22.     "refuse",    doaddrefuse,    0,    2,
  23.         "rip refuse <gateway>",    
  24.     "request",    doripreq,    0,    2,    NULLCHAR,
  25.     "status",    doripstat,    0,    0,    NULLCHAR,
  26.     "trace",    doriptrace,    0,    0,    NULLCHAR,
  27.     NULLCHAR,
  28. };
  29.  
  30. int
  31. dorip(argc,argv,p)
  32. int argc;
  33. char *argv[];
  34. void *p;
  35. {
  36.     return subcmd(Ripcmds,argc,argv,p);
  37. }
  38.  
  39. /* Add an entry to the RIP output list */
  40. int
  41. doripadd(argc,argv,p)
  42. int argc;
  43. char *argv[];
  44. void *p;
  45. {
  46.     char flags = 0;
  47.  
  48.     if(argc > 3)
  49.         flags = atoi(argv[3]);
  50.  
  51.     return rip_add(resolve(argv[1]),atol(argv[2]),flags);
  52. }
  53.  
  54. /* Add an entry to the RIP refuse list */
  55. int
  56. doaddrefuse(argc,argv,p)
  57. int argc;
  58. char *argv[];
  59. void *p;
  60. {
  61.     return riprefadd(resolve(argv[1]));
  62. }
  63.  
  64. /* Drop an entry from the RIP output list */
  65. int
  66. doripdrop(argc,argv,p)
  67. int argc;
  68. char *argv[];
  69. void *p;
  70. {
  71.     return rip_drop(resolve(argv[1]));
  72. }
  73.  
  74. /* Drop an entry from the RIP refuse list */
  75. int
  76. dodroprefuse(argc,argv,p)
  77. int argc;
  78. char *argv[];
  79. void *p;
  80. {
  81.     return riprefdrop(resolve(argv[1]));
  82. }
  83.  
  84. /* Initialize the RIP listener */
  85. int
  86. doripinit(argc,argv,p)
  87. int argc;
  88. char *argv[];
  89. void *p;
  90. {
  91.     return rip_init();
  92. }
  93. int
  94. doripstop(argc,argv,p)
  95. int argc;
  96. char *argv[];
  97. void *p;
  98. {
  99.     del_udp(Rip_cb);
  100.     Rip_cb = NULLUDP;
  101.     return 0;
  102. }
  103. int
  104. doripreq(argc,argv,p)
  105. int argc;
  106. char *argv[];
  107. void *p;
  108. {
  109.     int16 replyport;
  110.  
  111.     if(argc > 2)
  112.         replyport = atoi(argv[2]);
  113.     else
  114.         replyport = RIP_PORT;
  115.     return ripreq(resolve(argv[1]),replyport);
  116. }
  117. /* Dump RIP statistics */
  118. int
  119. doripstat(argc,argv,p)
  120. int argc;
  121. char *argv[];
  122. void *p;
  123. {
  124.     struct rip_list *rl;
  125.     struct rip_refuse *rfl;
  126.  
  127.     tprintf("RIP: sent %lu rcvd %lu reqst %lu resp %lu unk %lu refused %lu\n",
  128.      Rip_stat.output, Rip_stat.rcvd, Rip_stat.request, Rip_stat.response,
  129.      Rip_stat.unknown,Rip_stat.refusals);
  130.     if(Rip_list != NULLRL){
  131.         tprintf("Active RIP output interfaces:\n");
  132.         tprintf("Dest Addr       Interval Split\n");
  133.         for(rl=Rip_list; rl != NULLRL; rl = rl->next){
  134.             if(tprintf("%-16s%-9lu%-6u\n",
  135.              inet_ntoa(rl->dest),rl->interval,
  136.              !!(rl->flags&RIP_SPLIT)) == EOF)
  137.                 break;
  138.         }
  139.     }
  140.     if(Rip_refuse != NULLREF){
  141.         tprintf("Refusing announcements from gateways:\n");
  142.         for(rfl=Rip_refuse; rfl != NULLREF;rfl = rfl->next){
  143.             if(tprintf("%s\n",inet_ntoa(rfl->target)) == EOF)
  144.                 break;
  145.         }
  146.     }
  147.     return 0;
  148. }
  149.  
  150. int
  151. doriptrace(argc,argv,p)
  152. int argc;
  153. char *argv[];
  154. void *p;
  155. {
  156.     return setshort(&Rip_trace,"RIP tracing",argc,argv);
  157. }
  158. int
  159. doripmerge(argc,argv,p)
  160. int argc;
  161. char *argv[];
  162. void *p;
  163. {
  164.     return setbool(&Rip_merge,"RIP merging",argc,argv);
  165. }
  166.